package com.atguigu.activemq.topic;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class JmsConsumer_Topic {
    public static final String ACTIVEMQ_URL="tcp://124.70.84.192:61616";
    public static final String TOPIC_NAME="topic_lemon";
    //先写死连接地址,tcp协议，以“tcp://”开头，端口号写后端进程端口号
    public static void main(String[] args) throws Exception {
        //1、创建连接工厂,根据url地址
        //如果用户名密码都是默认的admin的话，连接可以用一个参数的构造方法，不然要用三个参数的构造方法，用户名密码url;
        ActiveMQConnectionFactory activeMQConnectionFactory=new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //2、通过连接工厂，获得连接connection并启动访问
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        /*3、创建会话session;参数1:是否开启事务；参数2:签收；*/
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4、创建目的地(具体是队列queue还是主题topic),参数填主题名字；
        Topic topic = session.createTopic(TOPIC_NAME);
        //5、创建消息消费者
        MessageConsumer messageConsumer = session.createConsumer(topic);
        System.out.println("1号消费者");
        //使用lambda代替匿名内部类，来构建监听器
        messageConsumer.setMessageListener(message -> {
            if(null!=message&&message instanceof TextMessage){
                //如果message不为空且message为TextMessage类的话执行下面内容
                TextMessage textMessage= (TextMessage)message;
                try {

                    System.out.println(textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        System.in.read();
        //给消费者一点时间消费完消息，
        //不然刚连接上还没开始消费就直接被下面给关了，导致消息没有收到;
        messageConsumer.close();
        session.close();
        connection.close();
    }
}
